A cyclic redundancy check (CRC) is an error-detecting code commonly used in digital networks and storage devices to detect accidental changes to raw data. Blocks of data entering these systems have a short check value attached, based on the remainder of a polynomial division of their contents. On retrieval, the calculation is repeated and, in the event the check values do not match, corrective action can be taken against data corruption.
The term CRC is used because the check (data verification) value is a redundancy (it expands the message without adding information), and the CRC algorithm is based on cyclic codes. CRCs widely used in data communications because they are simple to implement in binary hardware, easy to analyze mathematically, and because they are particularly good at detecting common errors caused by noise in transmission channels. Because the check value has a fixed length, the function that generates it is occasionally used as a hash function.
A CRC is called an N-bit CRC when its check value is n bits long. Larger bit CRCs have a variety of advantages, although they also have drawbacks in the larger amount of computational power used in generation. The design of CRC generation circuits that do not consume an undesirable amount of area, operate without an undesirable amount of latency, and that can keep up with the ever increasing bandwidths of data communications is ever a challenge. Therefore, further development in this area is desired.